package com.uade.rest;

import javax.naming.NamingException;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Produces;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;

import org.apache.log4j.Logger;
import org.hornetq.utils.json.JSONException;

import com.uade.business.BusinessDelegate;
import com.uade.business.BusinessDelegateImpl;
import com.uade.model.ArticuloRanking;
import com.uade.model.Ranking;
import com.uade.model.exceptions.NotFoundException;

@Path("/bestSeller")
public class RESTRanking {

	private static Logger log = Logger.getLogger(RESTRanking.class);

	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/procesar")
	public String procesar(Ranking rankings) throws JSONException {
		// JSONObject articulosRanking = new JSONObject();

		log.info("Inicia actualizacion del ranking de articulos");
		log.info("Datos recibidos");
		for (ArticuloRanking artRanking : rankings.getRankings())
			log.info("ID Articulo: " + artRanking.getCodigoArticulo()
					+ " Posicion: " + artRanking.getPosicion());

		String respuesta;
		String formato = "{ estado : \"%s\",mensaje : \"%s\" }";
		try {
			log.debug("Se llama al servidor para iniciar la actualizacion");
			BusinessDelegate bs = BusinessDelegateImpl.getInstanace();

			// Conversion
			log.debug("Se llama al servicio de actualizacion");
			bs.actualizarRanking(rankings);
			respuesta = String.format(formato, "OK",
					"Actualizacion completa sin errores");
			log.info(respuesta);
		} catch (NamingException e) {
			respuesta = String.format(formato, "ERROR", e.getMessage());
			e.printStackTrace();
		} catch (NotFoundException e) {
			log.warn("Actualizacion incompleta sin errores, 1 o mas articulos no existian en la base local"
					+ e.getMessage());
			respuesta = String
					.format(formato, "OK",
							"Algunos articulos no pudieron ser actualizados ya que no existian");
		}

		return respuesta;
	}
}
